www.gusucode.com > VC++ RingSDK界面库 > VC++ RingSDK界面库/code/example/advance/vc_like_gui/main.cpp

    /**********************************************************************
//
//
//        ##########                          ######  #########   # ######    #
//      #############                      ########### ######### #########  ###
//     ######## # ###  ##                 ############# ##    ## #####  # ####
//     ####  ##    ## ###                 ###     ### # #      #####   #####
//          #     ###  #            #     ##       ##  ##      ##     ###
//         ## ###### ##      ##  ####    ####          #       #     ##
//       #########  ###  ## ### #######   ######      ##      ##    ###
//      ######      ##  ######  ##  ##       ####     #      ##     ####
//     #######     ##   ###### ##  ###          ##   ##     ###    ######
//     #########   ##  ###### ## ######         ### ##    ###      #  #####
//    ##    ###### ####### ### #### ##  ## #######  ########      ##    ####
//    ##      #### ###  #  ### ### ##  ##########   ######       ##      ####
//   ##         ##                ##   #########    ####         #         ##
//               #              ###
//                              ##
//                             ###
//                             ##
//
//
//							RingSDK VC6界面模仿演示程序
//作者:临风
//
//版本:1.0
//
//说明:本程序演示使用RingSDK界面库模仿VC6界面。
//
//e-mail:ringphone@sina.com
//
**********************************************************************/
#include "global.h"

void UpdateToolbar();

BEGIN_REGMAINMSG
	REGCMD(CM_NEW,OnFileNew)
	REGCMD(CM_OPEN,OnFileOpen)
	REGCMD(CM_ABOUT,OnAbout)
	REGCMD(CM_EXIT,OnExit)
	REGCMD(CM_CASCADE,OnCascadeChild)
	REGCMD(CM_TILEH,OnTileChildH)
	REGCMD(CM_TILEV,OnTileChildV)
	REGCMD(CM_CLOSEALL,MaxChild)
	
	REGMSG(WM_CREATE)
	REGMSG(WM_RBUTTONDOWN)
	REGNOTIFY(TBN_DROPDOWN)
	REGMSG(WM_DESTROY)
END_REGMSG

int RingMain()
{	
	APP_CREATEWINDOW("VC界面演示程序","RINGSDK_VCLIKE_GUI",WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
		MAKEINTRESOURCE(IDM_MAIN));
	RingApp.SetIdleProc(UpdateToolbar);
	return RingApp.Run();
}

//空闲时更新工具栏
void UpdateToolbar()
{
	window->UpdateToolbar((BOOL)!(window->GetCurrChild()));
}

RINGMAINMSG(WM_CREATE)
{
	//设置程序图标
	SetIcon(LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_MAIN)));
	//创建子窗口背景画刷
	HBITMAP hbm = LoadBitmap(GetInstance(),MAKEINTRESOURCE(IDB_LINE));
	m_brush = CreatePatternBrush(hbm);
	DeleteObject(hbm);

	//初始化菜单,XP风格
	rm = InstallXPMenu();
	//设置菜单图标
	HINSTANCE m_hInst = GetInstance();
	rm->SubMenu(0)->SetItemIcon(CM_NEW,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_NEW)));
	rm->SubMenu(0)->SetItemIcon(CM_OPEN,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_OPEN)));
	rm->SubMenu(0)->SetItemIcon(CM_SAVE,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_SAVE)));
	rm->SubMenu(0)->SetItemIcon(CM_SAVEALL,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_SAVEALL)));
	rm->SubMenu(0)->SetItemIcon(IDC_PRINT,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_PRINT)));
	rm->SubMenu(0)->SetItemIcon(CM_EXIT,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_EXIT)));
	rm->SubMenu(1)->SetItemIcon(CM_UNDO,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_UNDO)));
	rm->SubMenu(1)->SetItemIcon(CM_REDO,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_REDO)));
	rm->SubMenu(1)->SetItemIcon(CM_COPY,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_COPY)));
	rm->SubMenu(1)->SetItemIcon(CM_PASTE,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_PASTE)));
	rm->SubMenu(1)->SetItemIcon(CM_CUT,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_CUT)));
	rm->SubMenu(1)->SetItemIcon(CM_DELETE,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_DEL)));
	rm->SubMenu(1)->SetItemIcon(CM_FIND,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_FIND)));
	rm->SubMenu(1)->SetItemIcon(CM_FINDINFILE,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_FINDFILE)));
	rm->SubMenu(2)->SetItemIcon(CM_CLASSID,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_ID)));
	rm->SubMenu(2)->SetItemIcon(IDC_FULLSCREEN,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_FULLSCREEN)));
	rm->SubMenu(2)->SetItemIcon(IDC_REFRESH,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_REFRESH)));
	rm->SubMenu(2)->SetItemIcon(IDC_PROP,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_PROP)));
	rm->SubMenu(5)->SetItemIcon(IDC_COMPILE,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_COMPILE)));
	rm->SubMenu(5)->SetItemIcon(CM_REBUILD,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_REBUILD)));
	rm->SubMenu(5)->SetSubMenuIcon(0,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_RUN)));
	rm->SubMenu(5)->SubMenu(0)->SetItemIcon(IDC_RUN,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_RUN)));
	rm->SubMenu(6)->SetItemIcon(IDC_1,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TOOL)));
	rm->SubMenu(6)->SetItemIcon(IDC_2,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TOOL)));
	rm->SubMenu(6)->SetItemIcon(IDC_3,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TOOL)));
	rm->SubMenu(6)->SetItemIcon(IDC_4,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TOOL)));
	rm->SubMenu(6)->SetItemIcon(IDC_5,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TOOL)));
	rm->SubMenu(6)->SetItemIcon(IDC_6,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TOOL)));
	rm->SubMenu(6)->SetItemIcon(IDC_7,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TOOL)));
	rm->SubMenu(6)->SetItemIcon(IDC_MACRO,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_MACRO)));
	rm->SubMenu(7)->SetItemIcon(IDC_NEWWINDOW,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_NEWWINDOW)));
	rm->SubMenu(7)->SetItemIcon(IDC_SPLIT,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_SPLIT)));
	rm->SubMenu(7)->SetItemIcon(CM_CLOSEWINDOW,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_CLOSE)));
	rm->SubMenu(7)->SetItemIcon(IDC_NEXT,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_NEXT)));
	rm->SubMenu(7)->SetItemIcon(IDC_PREV,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_PREV)));
	rm->SubMenu(7)->SetItemIcon(CM_CASCADE,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_CASCADE)));
	rm->SubMenu(7)->SetItemIcon(CM_TILEH,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TILEH)));
	rm->SubMenu(7)->SetItemIcon(CM_TILEV,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_TILEV)));
	rm->SubMenu(8)->SetItemIcon(IDC_SEARCH,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_SEARCH)));
	rm->SubMenu(8)->SetItemIcon(CM_ABOUT,LoadIcon(m_hInst,MAKEINTRESOURCE(IDI_HELP)));
	
	//设置工具栏显示/隐藏菜单为XP风格
	RingCoolMenu *srm = GetDockMenu();
	if(srm)
   {		
		srm->SetItemDrawFunc(FUNC_DRAWMENU_XP);//,TRUE,FUNC_DRAWMENU_XP);
		srm->SetBkgColor(0x00ffffff,0x00ff8080);
   }
	//设置背景图片,设置后以后创建的停靠窗口及工具栏均自动采用该图片
	SetDockBackGround(MAKEINTRESOURCE(IDB_BKG),TRUE);

	//加载右键快捷菜单
	rmBtn = new RingCoolMenu();
	
	if(rmBtn)
   {
		rmBtn->LoadPopup(MAKEINTRESOURCE(IDM_POP));
		rmBtn->SetItemDrawFunc(FUNC_DRAWMENU_XP,TRUE,FUNC_DRAWPARENT_XP);
		rmBtn->SetColor(0x00ffffff,0x00ff8080,MENUCOLOR_TRANSPARENT,MENUCOLOR_TRANSPARENT);
		rmBtn->SetDefaultItem(CM_TOSEL);
   }
	//生成菜单栏
	RingMenuBar *menubar = NewRingObj(itemof(RingMenuBar));
	menubar->LoadMenu(rm);
	
	//导航栏
	wizbar = NewRingObj(itemof(RingToolBar));
	wizbar->Create(IDB_TOOL,TBSTYLE_FLAT,TBSTYLE_EX_DRAWDDARROWS);
	RingCombo* combo = wizbar->NewRingObj(itemof(RingCombo));
	if(combo)
	{		
		wizbar->InsertItem(0,combo,
			WS_CHILD|CBS_AUTOHSCROLL|CBS_DROPDOWN|CBS_HASSTRINGS|WS_BORDER|WS_VSCROLL,
			1,145,160);
		combo->Disable();
	}
	combo = wizbar->NewRingObj(itemof(RingCombo));
	if(combo)
	{		
		wizbar->InsertItem(1,combo,
			WS_CHILD|CBS_AUTOHSCROLL|CBS_DROPDOWN|CBS_HASSTRINGS|WS_BORDER|WS_VSCROLL,
			2,145,160);
		combo->Disable();
	}
	combo = wizbar->NewRingObj(itemof(RingCombo));
	if(combo)
	{		
		wizbar->InsertItem(2,combo,
			WS_CHILD|CBS_AUTOHSCROLL|CBS_DROPDOWN|CBS_HASSTRINGS|WS_BORDER|WS_VSCROLL,
			3,240,160);
		combo->Disable();
	}
	wizbar->InsertButton(3,0,CM_TOSEL,NULL,TBSTYLE_DROPDOWN,
			TBSTATE_ENABLED,(DWORD)rmBtn);
	wizbar->EnableDock("导航栏");

	//标准工具栏
	toolbar = NewRingObj(itemof(RingToolBar));
	toolbar->Create(IDB_DEFTOOLBAR,TBSTYLE_FLAT);
	toolbar->InsertButton(0,0,CM_NEW);
	toolbar->InsertSep(1);
	toolbar->InsertButton(2,1,CM_OPEN);
	toolbar->InsertButton(3,2,CM_SAVE);//,NULL,TBSTYLE_BUTTON,TBSTATE_INDETERMINATE);
	toolbar->InsertButton(4,3,CM_SAVEALL);//,NULL,TBSTYLE_BUTTON,TBSTATE_INDETERMINATE);
	toolbar->InsertSep(5);
	toolbar->InsertButton(6,4,CM_CUT);//,NULL,TBSTYLE_BUTTON,TBSTATE_INDETERMINATE);
	toolbar->InsertButton(7,5,CM_COPY);//,NULL,TBSTYLE_BUTTON,TBSTATE_INDETERMINATE);
	toolbar->InsertButton(8,6,CM_PASTE);//,NULL,TBSTYLE_BUTTON,TBSTATE_INDETERMINATE);
	toolbar->InsertSep(9);
	toolbar->InsertButton(10,7,CM_UNDO);//,NULL,TBSTYLE_DROPDOWN,TBSTATE_INDETERMINATE);
	toolbar->InsertButton(11,8,CM_REDO);//,NULL,TBSTYLE_DROPDOWN,TBSTATE_INDETERMINATE);
	toolbar->InsertSep(12);
	toolbar->InsertButton(13,9,CM_VIEWWORKSPACE);//,NULL,TBSTYLE_CHECK,TBSTATE_CHECKED|TBSTATE_ENABLED);
	toolbar->InsertButton(14,10,CM_VIEWOUTPUT);//,NULL,TBSTYLE_CHECK,TBSTATE_CHECKED|TBSTATE_ENABLED);
	toolbar->InsertButton(15,11,CM_PASTE);
	toolbar->InsertSep(16);
	toolbar->InsertButton(17,12,CM_FINDINFILE);

	combo = toolbar->NewRingObj(itemof(RingCombo));
	if(combo)
	{		
		toolbar->InsertItem(18,combo,
			WS_CHILD|CBS_AUTOHSCROLL|CBS_DROPDOWN|CBS_HASSTRINGS|WS_BORDER|WS_VSCROLL,
			4,200,160);		
	}

	toolbar->InsertSep(19);
	toolbar->InsertButton(20,13,CM_FIND);
	toolbar->EnableDock("标准工具栏");

	//生成工具栏
	toolbar = NewRingObj(itemof(RingToolBar));
	toolbar->Create(IDB_BUILDBAR,TBSTYLE_FLAT);
	//toolbar->LoadToolBar(IDR_DEFTOOLBAR);
	toolbar->InsertButton(0,0,CM_COMPILE);
	toolbar->InsertButton(1,1,CM_BUILD);
	toolbar->InsertButton(2,2,CM_STOPBUILD);
	toolbar->InsertButton(3,3,CM_EXEC);
	toolbar->InsertButton(4,4,CM_RUN);
	toolbar->InsertButton(5,5,CM_BREAKPOINT);
	toolbar->EnableDock("编译工具栏");

	//侧边栏
	m_tab = NewRingObj(m_tab);
	if(m_tab)
	{
		m_tab->Create(TCS_BOTTOM|TCS_HOTTRACK,RTV_FITPARENTSIZE,
			NULL,19921,0,0,300,400);
		
		m_tab->InsertTabs("类|资源|文件");
		m_tab->SetIcon(0,m_tab->AddIcon(IDI_NEW));
		m_tab->SetIcon(1,m_tab->AddIcon(IDI_WIN));
		m_tab->SetIcon(2,m_tab->AddIcon(IDI_TEXT));
		
		HTREEITEM htiRoot,hti;
		m_classTree = m_tab->NewRingObj(m_classTree);
		if(m_classTree)
		{
			m_classTree->Create(TVS_HASBUTTONS | TVS_HASLINES | 
				TVS_LINESATROOT,RTV_FITPARENTSIZE,NULL,19923,0,0,300,260);
			m_classTree->AddIcon(IDI_PROJ);
			m_classTree->AddIcon(IDI_CLASS);
			m_classTree->AddIcon(IDI_MEMFUNC);
			m_classTree->AddIcon(IDI_MEMDATA);
			htiRoot = m_classTree->AddRoot("Project classes",NULL,0,0);
			hti = m_classTree->AddItem("Class1",htiRoot,TVI_FIRST,0,1);
			m_classTree->AddItem("Func1",hti,TVI_FIRST,0,2);
			m_classTree->AddItem("Data1",hti,TVI_LAST,0,3);
			m_classTree->Expand(htiRoot);
			m_classTree->Expand(hti);
			m_tab->SetTabToWnd(0,m_classTree);
		}
		m_resTree = m_tab->NewRingObj(m_resTree);
		if(m_resTree)
		{
			m_resTree->Create(TVS_HASBUTTONS | TVS_HASLINES | 
				TVS_LINESATROOT,RTV_FITPARENTSIZE,NULL,19924,0,0,300,260);
			m_resTree->AddIcon(IDI_PROJ);
			m_resTree->AddIcon(IDI_FOLDER);
			m_resTree->AddIcon(IDI_BMP);
			m_resTree->AddIcon(IDI_DLG);
			m_resTree->AddIcon(IDI_OPEN);
			htiRoot = m_resTree->AddRoot("Project resources",NULL,0,0);
			hti = m_resTree->AddItem("Bitmap",htiRoot,TVI_FIRST,0,1,4);
			m_resTree->AddItem("IDB_BITMAP1",hti,TVI_FIRST,0,2);
			m_resTree->Expand(hti);
			hti = m_resTree->AddItem("Dialog",htiRoot,TVI_LAST,0,1,4);
			m_resTree->AddItem("IDD_ABOUT",hti,TVI_LAST,0,3);
			m_resTree->Expand(htiRoot);
			m_resTree->Expand(hti);
			m_tab->SetTabToWnd(1,m_resTree);
		}
		m_fileTree = m_tab->NewRingObj(m_fileTree);
		if(m_fileTree)
		{
			m_fileTree->Create(TVS_HASBUTTONS | TVS_HASLINES | 
				TVS_LINESATROOT,RTV_FITPARENTSIZE,NULL,19925,0,0,300,260);
			m_fileTree->AddIcon(IDI_PROJ);
			m_fileTree->AddIcon(IDI_FOLDER);
			m_fileTree->AddIcon(IDI_CPP);
			m_fileTree->AddIcon(IDI_TEXT);
			m_fileTree->AddIcon(IDI_OPEN);
			htiRoot = m_fileTree->AddRoot("Workspace 'Project':1 project(s)",NULL,0,0);
			hti = m_fileTree->AddItem("Project Files",htiRoot,TVI_FIRST,0);
			m_fileTree->Expand(htiRoot);
			htiRoot = hti;
			hti = m_fileTree->AddItem("Source Files",htiRoot,TVI_FIRST,0,1,4);
			m_fileTree->AddItem("demo.cpp",hti,TVI_FIRST,0,2);
			m_fileTree->Expand(hti);
			hti = m_fileTree->AddItem("Header Files",htiRoot,TVI_LAST,0,1,4);
			m_fileTree->AddItem("demo.h",hti,TVI_LAST,0,3);
			m_fileTree->Expand(htiRoot);
			m_fileTree->Expand(hti);
			m_fileTree->AddItem("Resource Files",htiRoot,TVI_LAST,0,1,4);
			m_fileTree->AddItem("External Dependencies",htiRoot,TVI_LAST,0,1,4);
			m_tab->SetTabToWnd(2,m_fileTree);
		}
	}
	m_tab->EnableDockSize("工作区",160,200,TBS_FLAG_DOCKLEFT,TBS_EX_DOCKABLE|TBS_EX_CANCLOSE);

	RingTabEx* tab = NewRingObj(itemof(RingTabEx));
	if(tab)
	{
		tab->Create(TCS_BOTTOM,RTV_FITPARENTSIZE,NULL,19925,0,0,400,300);
		
		tab->InsertTabs("编译|调试|文件查找结果1|文件查找结果2|结果|数据库调试");
		m_edit = NewRingObj(itemof(RingEdit));
		if(m_edit)
		{
			m_edit->Create(ES_MULTILINE|ES_READONLY|ES_WANTRETURN|WS_VSCROLL,
				WS_EX_CLIENTEDGE|RTV_FITPARENTSIZE,NULL,20001,0,0,0,0);
			m_edit->SetBkColor(0x00FFFFFF);
			for(int i=0;i<6;i++)
				tab->SetTabToWnd(i,m_edit);
			tab->Select(0);
		}
	}
	tab->EnableDockSize("输出栏",200,160,TBS_FLAG_DOCKBOTTOM,TBS_EX_DOCKABLE|TBS_EX_CANCLOSE);

	//状态栏
	RingStatusBar* sbar = NewRingObj(itemof(RingStatusBar));
	if(sbar->Create())
	{
		sbar->SetParts(6);
		sbar->SetValue(0,"就绪",SBPS_STRETCH);
		sbar->SetValue("就绪",MAKELONG(0,SBTS_NOBORDER));
		sbar->SetValue(1,"行,列",SBPS_FITTEXT|SBPF_UPDATE);
		sbar->SetValue(2,"录制",SBPS_FITTEXT);
		sbar->SetValue(3,"COL",SBPS_FITTEXT);
		sbar->SetValue(4,"OVR",SBPS_FITTEXT);
		sbar->SetValue(5,"READ",SBPS_FITTEXT);
	}

	return DefaultProc(param);
}

RINGMAINMSG(WM_DESTROY)
{
	delete rmBtn;
	DeleteObject(m_brush);
	return Quit();
}

RINGMAINMSG(WM_RBUTTONDOWN)
{
	rm->SubMenu(0)->Popup(m_hWnd);
	return 0;
}

RINGMAINNOTIFY(TBN_DROPDOWN)
{
	LPNMTOOLBAR nmb = (LPNMTOOLBAR)param.lParam;
	if(nmb->iItem == CM_TOSEL)
	{
		RECT rc;
		
		wizbar->GetButtonRect(3,&rc);
		
		//ClientToScreen()
		MapWindowPoints(wizbar->Handle(),HWND_DESKTOP,(LPPOINT)&rc,2);
		rmBtn->Popup(m_hWnd,rc.left + LOWORD(wizbar->GetButtonSize()),rc.bottom);
	}
	return TBDDRET_DEFAULT;
}

RINGMAINMSG(WM_RINGTOOLHELP)
{
	char s[80];
	wsprintf(s,"%d\0",param.wParam);
	SetTitle(s);
	return 0;
}

RINGMAINCMD(OnFileNew)
{
	child = NewRingObj(child);
	CreateChild("new document",child,FALSE,WS_OVERLAPPEDWINDOW);
	//child->Show(SW_SHOWMAXIMIZED);
}

void RINGMAINMETHOD(UpdateToolbar)(BOOL bNoChild)
{
	RingCombo* combo = (RingCombo*)wizbar->GetContrlolItem(1);
	
	if(combo)
		if(bNoChild && combo->IsEnabled())
			combo->Disable();
		else if(!bNoChild && !combo->IsEnabled())
		{
			combo->Enable();
			combo->AddString("(Globals)");
			combo->Select(0);
		}
	combo = (RingCombo*)wizbar->GetContrlolItem(2);
	if(combo)
		if(bNoChild && combo->IsEnabled())
			combo->Disable();
		else if(!bNoChild && !combo->IsEnabled())
		{
			combo->Enable();
			combo->AddString("(All global members)");
			combo->Select(0);
		}
	combo = (RingCombo*)wizbar->GetContrlolItem(3);
	if(combo)
		if(bNoChild && combo->IsEnabled())
			combo->Disable();
		else if(!bNoChild && !combo->IsEnabled())
			combo->Enable();	

}

RINGMAINCMD(OnFileOpen)
{
}

RINGMAINCMD(OnAbout)
{
	RingDialog(IDD_ABOUT).DoModal();	
}

RINGMAINCMD(OnExit)
{
	SendExit();
}